package com.Biblioteca.Controllers;

import com.Biblioteca.Entidades.Exemplar;
import com.Biblioteca.Entidades.Obra;
import com.Biblieca.Utils.ComparationUtils;

public class ObraController extends AbstractController<Obra> {
	
	private ExemplarController exemplarController;
	
	public ObraController (ExemplarController exemplarController){
		this.exemplarController=exemplarController;
	}
	
	@Override
	protected void SaveImpl (Obra obra){
		if (isValid(obra)){
			repositorio.save(obra.getId(), obra);
		}
	}
	private boolean isValid(Obra obra){
		return ComparationUtils.stringIsNotNullOrEmpty(obra.getAutor())
				&& ComparationUtils.stringIsNotNullOrEmpty(obra.getEditora())
				&& ComparationUtils.dateIsNotNull(obra.getPublicacao())
				&& ComparationUtils.tipoIsNotNull(obra.getTipo());
	}
	
	public Obra buscaObraByID (Integer id){
		return repositorio.buscaByKey(id);
	}
	
	@Override
	protected void RemoveImpl (Obra obra){
		if (isExemplaresEmprestados(obra)){
			return;
		}
		for (Exemplar exemplar:obra.getExemplares()){
			exemplarController.Remove(exemplar);
		}
		//remover reservas		
		Remove(obra);
	}
	
	public void alteraObra (Obra obra){
		
	}

	public ExemplarController getExemplarController() {
		return exemplarController;
	}
	
	public Boolean isExemplaresEmprestados(Obra obra){
		for (Exemplar exemplar:obra.getExemplares()){
			if (exemplar.getIsEmprestado() == true) {
				return true;
			}
		}
		return false;
	}
}
